package cn.ffcs.product.service;

import java.io.File;
import java.util.HashMap;
import java.util.List;

import org.hibernate.criterion.Criterion;

import cn.ffcs.base.service.IBaseService;
import cn.ffcs.base.web.PageControl;
import cn.ffcs.common.model.Attach;
import cn.ffcs.organ.model.LinkMethod;
import cn.ffcs.organ.model.Person;
import cn.ffcs.product.model.Product;
import cn.ffcs.product.model.ProductReference;
import cn.ffcs.sort.model.ProductSort;
import cn.ffcs.system.dict.model.Dict;

/**
 * 字典类型业务逻辑层<br/>
 * <table>
 * <tr>
 * <td>负责人/principal:</td>
 * <td colspan="2">liuzhh</td>
 * <tr>
 * <td>修改记录/revision:</td>
 * <td colspan="2"></td>
 * </tr>
 * <tr>
 * <td>日期:</td>
 * <td>修改人:</td>
 * <td>修改说明:</td>
 * </tr>
 * <tr>
 * <td></td>
 * <td></td>
 * <td></td>
 * </tr>
 * </table>
 * @author g.huangjx
 * @version $Id$
 */
public interface IProductService<D extends Product> extends IBaseService<D>
{
    /**
     * 删除产品所有属性
     * @param b
     * @return
     */
    
    public void deleteProductInfo(String productId);
    /**
     *循环保存产品属性
     * @param b
     * @return
     */
    public void saveProductInfo(D d,String addInfos,String addValues);
    /**
     *产品修改，包括上传附件和动态属性修改
     * @param b
     * @return
     */
    public void saveAll(D d,String addInfos,String addValues,List<File> uploads,List<String> fileNames,String[] delIDs,String[] mainPersons,String[] persons);
    /**
     *目录下的产品修改，包括上传附件和动态属性修改
     * @param b
     * @return
     */
    public void saveAll(D d,String addInfos,String addValues,List<File> uploads,List<String> fileNames,String[] delIDs,String[] mainPersons,String[] persons,ProductSort productSort);

    public void saveAll(D d, String addInfos, String addValues,
            List<File> uploads, List<String> fileNames, String[] delIDs,
            String[] mainPersons, String[] persons,String [] sortIds);
    /**
     * 删除产品所有负责人
     * @param b
     * @return
     */
    public void deletePerson(String productId);

    /**
     * 
     * 获取产品展示信息
     * @param product
     * @param lMainPerson
     * @param lGenPersons
     */
    public void showProductInfoById(Product product, List<Person> lMainPerson,
            List<Person> lGenPersons);
    
    /**
     * 获取管理员联系方式
     * @param p
     * @return
     */
    public List<LinkMethod> getPMLinkMethods(Person p);
    /**
     * 根据产品目录查产品
     * @param p
     * @return
     */
    public List<Product> findBySort(String sortId);

    /**
     * 获取产品资料信息，包括业务管理规范和产品说明书、产品视图
     * @param prodID
     */
    public List<ProductReference> findProdRefsById(int prodID);
    
    public PageControl findByPage(HashMap<String, Object> conds,int currPage, int pageSize);
    
}
